package org.seedltd.upms.mapper.sys;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.seedltd.core.base.IBaseMapper;
import org.seedltd.upms.model.sys.common.SelectTreeVO;
import org.seedltd.upms.model.sys.entity.SysMenu;
import org.seedltd.upms.model.sys.vo.SysMenuVO;

import java.util.List;
import java.util.Set;

/**
 * 系统菜单数据库访问接口
 */
public interface SysMenuMapper extends IBaseMapper<SysMenu> {

    /**
     * 获取当前登入用户的菜单
     * @return
     */
    List<SysMenuVO> listUserMenu(Long userId);

    /**
     * 获取到下拉列表选项菜单数据
     * @return
     */
    List<SelectTreeVO> listSelectTreeMenu();

    @Select("select 1 from sys_menu where parent_id = #{menuId} limit 1")
    Integer checkHasChildren(@Param("menuId") Long menuId);


    /**
     * 根据菜单主键删除角色和菜单关联关系
     * @param menuId 菜单主键
     * @return
     */
    @Delete("delete from sys_role_menu where menu_id = #{menuId}")
    int deleteMenuRoleByMenuId(@Param("menuId") Long menuId);


    /**
     * 插入角色和菜单关联关系表
     * @param roleId 角色主键
     * @param menuIdList 菜单主键集合
     * @return
     */
    int insertMenuRole(@Param("roleId") Long roleId,@Param("menuIdList") Set<Long> menuIdList);

    /**
     * 根据角色主键删除角色和菜单关联关系
     * @param roleId 角色主键
     * @return
     */
    @Delete("delete from sys_role_menu where role_id = #{roleId}")
    int deleteMenuRoleByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据角色主键删除角色和菜单关联关系
     * @param roleId 角色主键
     * @return
     */
    @Delete("delete from sys_role_user where role_id = #{roleId}")
    int deleteUserRoleByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据角色主键删除角色和部门关联关系
     * @param roleId 角色主键
     * @return
     */
    @Delete("delete from sys_role_dept where role_id = #{roleId}")
    int deleteDeptRoleByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据角色主键获取到菜单主键集合
     * @param roleId 角色主键
     * @return
     */
    @Select("select menu_id from sys_role_menu where role_id = #{roleId}")
    Set<Long> listMenuIdByRoleId(@Param("roleId")Long roleId);
}
